能否把Linux内核部分固化并运行在FPGA上,或者直接流片成ASIC,以提高运行效率? 您所在的位置:网站首页 ubuntu 查看内核 能否把Linux内核部分固化并运行在FPGA上,或者直接流片成ASIC,以提高运行效率?

能否把Linux内核部分固化并运行在FPGA上,或者直接流片成ASIC,以提高运行效率?

2023-04-17 11:11| 来源: 网络整理| 查看: 265

理论很丰满,现实很骨感。

这个问题本质上是软件和硬件的体系划分。

有很多算法可以用软件实现,也可以用硬件实现。

比如可以在软件上跑一个h264的算法,可以找到C的(软件实现),也可以找到verilog(硬件实现)。

的确有些算法即适合软件来实现,通过C在CPU的编程,灵活啊。

也适合硬件来做,例如FPGA/ASIC,高速啊。

还适合软硬结合来实现,例如CPU带MMX扩展指令,也可以加速h264的速度,还保持了灵活性。

所以,我们看到这几种方式,处理器实现效率低,ASIC/FPGA实现不灵活。

所以就出现了很多DSA架构,面向领域的定制的处理器,综合了灵活性和高性能,比如可以定制一个面向视频处理方面的处理器,可以处理目前所有的编码协议,264,265,包括AVS等等。

回头题目上来,我们说linux内核能不能用ASIC/FPGA实现。

答案既不可行,又无必要

大约10年前,我曾经在FPGA上装上openrisc,当时就裁剪了一个linux的最小的内核放进去,大约8M的bin文件,最后把系统成功启动起来。

这实际上就是软件在cpu上跑的当时启动了linux的内核。

当然不是用FPGA/ASIC技术来实现linux,也就是linux的硬化。

那为什么不能用FPGA/ASIC实现内核的一部分。

我们先看看linux的内核都有哪些组件?

1:进程管理:内核管理用户空间程序的执行,创建和管理进程,为每个进程调度CPU时间,处理进程间通信。

2:内存管理:内核管理内存向用户空间程序的分配和释放。

3:设备驱动:内核为设备驱动程序提供接口,负责管理系统的硬件组件,如网络适配器、存储设备和显示适配器。

4:文件系统:内核提供文件系统支持,包括读写各种类型文件系统的能力。

5:访问控制:内核提供访问控制、权限管理等安全特性,确保用户空间的程序无法进行未授权的操作。

上面这5点都强调是灵活性,并且和CPU是紧密耦合的关系。

我们拿设备驱动举例,仅仅是一个串口驱动,如果用ASIC/FPGA(verilog)实现内核里面printK函数,这个难度就是顶天的。需要考虑多少个字符串,多少种字符串,字符串的拼接,字符串如何转换,这个比用verilog来写基本上难度比写一个串口模块大好几个数量级。

并且最主要的是,更重要的是用verilog费这么大力气实现这么个东西,和软件的printk函数相比完全没有什么优势。

就是串口打印个数,这么做非常的不灵活,也不高效(串口速率决定了!)。

完全没有用。

完全没有用。

完全没有用。

重要的事情说三遍。

翻看内核各种函数,这还是一个最简单的printk,除此之外有上万个类似的函数,这些函数之间还有错综复杂的调用关系。要知道verilog的调用可真的是模块的复制啊,这种实现简直不敢想象。

用verilog写完,变成FPGA/ASIC完全是不可行的。

因此不论是进程管理,内存管理,设备驱动,文件系统,访问控制等等,这些都是为了CPU更灵活被应用而发明出来的。

linux和CPU是共生关系,但凡翻看过linux内核的C代码的,就会明白linux内核是完全不适合ASIC/FPGA用实现的。

那说到这里,那这个题目问的难道没有意义吗?

有的?

虽然不能将liunx内核固化在FPGA/ASIC上,但是,内核里面一些运行的瓶颈完全可以通过硬件加速的方式来优化。

例如:

1:设备驱动里面就用很多硬件加速开关,通过开启这些硬件加速开关,内核就能少做很多的工作,减少指令消耗。

2:指令加速,目前SIMD的指令在内核中也经常被调用,翻开各种CPU版本的linux的内核也能看到这一点。

这些都是内核加速的一些方式,提升内核运行的效率。

但是这些加速有必要,硬件替代完全不可行,不必要。

软件和硬件尤其自然的分解,虽然很多时候一些地方处于模糊的地带,但是毫不疑问,linux内核就是软件实现最基础的那块基石。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有